<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../css/reset.css">
    <style>
        .wrap {
            margin: 10px;
        }

        .list {
            margin-top: 10px;
            line-height: 40px;
            text-indent: 10px;
        }

        .list li {
            border: 1px dashed #333;
        }

        .list li+li {
            border-top: 0;
        }
    </style>
</head>

<body>
    <div class="wrap">
        <button>新增文本</button>
        <button>新增注释</button>
        <button>新增属性</button>
        <button>新增文档碎片</button>
        <ul class="list">
            <li class="first">01</li>
            <li>02</li>
            <li class="mid">03</li>
            <li>04</li>
            <li>05</li>
            <li class="last">06</li>
        </ul>
    </div>
</body>
<script>
    // 创建元素节点
    // document.createElement(tagName)  根据传入的标签名(字符串),创建对应的元素节点 => 返回创建的元素节点
    // document.createTextNode(string)  根据传入的文本内容,创建对应的文本节点 => 返回创建的文本节点
    // document.createComment(string)  根据传入的文本内容,创建对应的注释节点 => 返回创建的注释节点
    // document.createAttribute(attrName)  根据传入的属性名,创建对应的属性节点 => 返回创建的属性节点


    // 注意: 新增的元素,默认存储在内存当中 => 放到页面中才会显示

    // 放到父元素中  => 父元素统筹   追加(放在父元素所有内容的最后面)    预追加(放在父元素所有内容的最前面)
    // parent.appendChild(Node)    向匹配的元素(父元素)中  追加  一个节点(元素节点/文本节点/注释节点)    

    // parent.append(string|Node)    向匹配的元素(父元素)中  追加  一个节点(文本/元素节点/文本节点/注释节点)    
    // parent.prepend(string|Node)   向匹配的元素(父元素)中  预追加  一个节点(文本/元素节点/文本节点/注释节点)   

    // 放到同级元素的前面  => 父元素统筹
    // parent.insertBefore(newNode,oldNode);

    // 新增/插入的节点 可以是新的,也可以是页面中已存在的


    // 点击 新增元素 按钮 => 创建一个li放到mid的前面

    var addText = document.getElementsByTagName("button")[0];
    var addComment = document.getElementsByTagName("button")[1];
    var addAttr = document.getElementsByTagName("button")[2];
    var addFrg = document.getElementsByTagName("button")[3];
    var ul = document.getElementsByClassName("list")[0];

    addText.onclick = function () {
        // 1. 创建一个li 
        var li = document.createElement("li");
        console.log(li);

        // li.innerText = "我是新增的li";    通过元素节点设置文本

        // 创建文本节点 放到li中
        var text = document.createTextNode("我是新增的li");
        li.appendChild(text);

        ul.appendChild(li);
    }


    // 新增一条注释 放到list中
    addComment.onclick = function () {
        var comment = document.createComment("这是被注释的内容");
        console.log(comment);
        ul.appendChild(comment);
    }


    addAttr.onclick = function () {
        var li = document.createElement("li");
        console.log(li);

        // 添加内容 属性 样式
        li.innerText = "我是新增的li";

        // li.setAttribute("class", "newLi");  通过元素快捷添加属性

        // 创建一个属性  => 添加到li中
        var classAttr = document.createAttribute("class");  //创建属性节点
        classAttr.nodeValue = "newLi";  // 设置属性节点的值
        console.log(classAttr);

        // 添加到li中  => 注意属性节点依存于元素节点  => 不能作为元素节点的内容存在
        li.setAttributeNode(classAttr);   // 给元素节点 设置 属性节点
        // li.removeAttributeNode(classAttr);

        ul.appendChild(li);
    }


    addFrg.onclick = function () {
        debugger;
        // for (var i = 0; i < 100; i++) {
        //     var li = document.createElement("li");
        //     console.log(li);

        //     // 添加内容 属性 样式
        //     li.innerText = "我是新增的li";
        //     li.setAttribute("class", "newLi");
        //     li.style.backgroundColor = randColor();

        //     ul.appendChild(li);
        // }

        var frg = document.createDocumentFragment(); // 可以理解为是一个存放节点的容器,将该容器放到页面时,容器会小数 => 容器中的节点会依次放到页面中

        for (var i = 0; i < 100; i++) {
            var li = document.createElement("li");
            console.log(li);

            // 添加内容 属性 样式
            li.innerText = "我是新增的li";
            li.setAttribute("class", "newLi");
            li.style.backgroundColor = randColor();

            frg.appendChild(li);
        }

        ul.appendChild(frg);
    }







    function randColor() {
        // return `rgba(${Math.round(Math.random() * 255)},${Math.round(Math.random() * 255)},${Math.round(Math.random() * 255)},1)`;

        var colorStr = "0123456789abcdef";  // 16 

        var str = "#";
        for (var i = 0; i < 6; i++) {
            // var index = Math.round(Math.random() * (colorStr.length - 1));
            var index = Math.floor(Math.random() * colorStr.length);
            var char = colorStr.charAt(index);
            str += char;
        }
        console.log(str);
        return str;
    }





</script>

</html>